package _02字符流;

import java.io.*;

public class ReaderWrtierDemo {

	public static void main(String[] args) throws IOException {

		// 字符流
		// Reader
		// Writer

//		testWriter();
		
		testReader();

	}

	private static void testReader() throws IOException 
	{
	
		// 1. 打开
		Reader r = new FileReader("d:/1.txt");
		
		// 2. 读取
		// 读取单个字符
//		char c = (char)r.read();
//		System.out.println(c);
		
		// 读取到字符数组
//		char[] buf = new char[1024];
//		int len = r.read(buf);
//		String str = new String(buf,0,len);
//		System.out.println(str);
		
		
		char[] buf = new char[1024];
		int len=0;
		
//		do
//		{
//			len = r.read(buf); // 返回的是实际读到的内容 ，如果是-1表示，读到了文件的结尾
//			if(len!=-1)
//			{
//				String str = new String(buf,0,len);
//				System.out.println("读到长度:"+len);
//			}
//			else
//			{
//				System.out.println("到了文件结束了");
//			}
//		}while(len!=-1);
		
		while((len=r.read(buf))!=-1)
		{
			String str = new String(buf,0,len);
			System.out.println("读到长度:"+len);
		}
		
		// 3. 关闭
		r.close();
		
	}

	private static void testWriter() throws IOException {
		// TODO Auto-generated method stub
		// 1. 创建字符输出流
		Writer w = new FileWriter("d:/1.txt");

		// 2. 写入内容
		// 写入字符串
		w.write("Hello world");

		// 写入字符数组
		char[] cbuf = { ',', 'J', 'a', 'v', 'a' };
		w.write(cbuf);

		// 写入ASCII
		w.write(97);

		// 3. 关闭流
		w.close();
	}

}

// Writer 的主要方法:

//void write(char[] cbuf) 
//写入字符数组。 
//abstract  void write(char[] cbuf, int off, int len) 
//写入字符数组的某一部分。 
//void write(int c) 
//写入单个字符。 
//void write(String str) 
//写入字符串。 
//void write(String str, int off, int len) 
//写入字符串的某一部分。 

//abstract  void close() 
//关闭此流，但要先刷新它。 
//abstract  void flush() 
//刷新该流的缓冲。 



//int read() 
//读取单个字符。 
//int read(char[] cbuf) 
//将字符读入数组。 
//abstract  int read(char[] cbuf, int off, int len) 
//将字符读入数组的某一部分。 
//int read(CharBuffer target) 
//试图将字符读入指定的字符缓冲区。 
